//
//  WBNetWorkManager.swift
//  传智微博
//
//  Created by globalives2 on 2016/11/24.
//  Copyright © 2016年 globalives2. All rights reserved.
//

import UIKit
import AFNetworking

/// Swift 的枚举支持任意数据类型
/// switch /enum 在OC 中都只是支持整数
enum WBHTTPMethod {
    case GET
    case POST
}

/// 网络管理工具
class WBNetWorkManager: AFHTTPSessionManager {
    
    /// 静态区／常量／闭包
    ///在第一次访问时，执行闭包，并且将结果保存在shared 中
    static let shared = WBNetWorkManager()
    
    /// 访问令牌，所有网络请求，都基于此令牌（登陆除外）
    var accessToken: String? = "2.00sirbcDGBZvpC5112c13685TdXyLE"
    
    /// 专门负责拼接 token 的网络请求方法
    ///
    /// - parameter method:     GET/POST
    /// - parameter URLString:  URLString
    /// - parameter parameters: 参数字典
    /// - parameter name:       上传文件使用的字段名，默认为nil，就不是上传文件
    /// - parameter data:       上传文件的二进制数据，默认为nil，不上传文件
    /// - parameter completion: 完成回调
    func tokenRequest(method: WBHTTPMethod = .GET, URLString: String, parameters: [String:AnyObject]?, name: String? = nil, data: Data? = nil, completion: @escaping (_ json: AnyObject?, _ isSuccess: Bool) ->Void) {
        
    }
    
    
    /// 使用一个函数封装 AFN 的 GET /POST 请求
    /// 封装AFN 的的GET /POST请求
    ///
    /// - parameter method:     GET /POST
    /// - parameter URLString:  URLString
    /// - parameter parameters: 参数字典
    /// - parameter completion: 回调json、是否成功
    func request(method: WBHTTPMethod = .GET, URLString: String,parameters: [String: AnyObject]?,completion: @escaping (_ json:AnyObject?,_ isSuccess:Bool) -> Void) {
        
        //成功回调
        let success = { (task: URLSessionDataTask, json: Any?)->() in
            
            completion(json as AnyObject?, true)
        }
        //失败回调
        let failure = { (task: URLSessionDataTask?, error: Error)->() in
            
            //针对 403 处理token 过期
//            if (task?.response as? HTTPURLResponse)?.statusCode == 403 {
//                
//                NotificationCenter.default.post(name: NSNotification.Name(rawValue: YWUserShouldLoginNotification), object: "bad Token", userInfo: nil)
//            }
            print("网络请求错误\(error)")
            completion(nil, false)
        
        }
        if method == .GET {
            get(URLString, parameters: URLString, progress: nil, success: success, failure: failure)
        } else {
             post(URLString, parameters: URLString, progress: nil, success: success, failure: failure)
        }
    }
}
